package someTestExcemple.APITest;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.Set;
import java.util.TimeZone;

public class DateTest {
    public static void main(String[] args){
        //DateTest1();
        //DateTest2();
        ZoneId zoneId = TimeZone.getDefault().toZoneId(); //获取系统默认时区
        ZoneId zone = ZoneId.systemDefault();
        System.out.println(zoneId);
        System.out.println(zone);
        //Java支持的所有时区Id
        Set<String> allZoneId = ZoneId.getAvailableZoneIds();
        //ZoneId.getAvailableZoneIds().forEach(System.out::println);
        //allZoneId.forEach(System.out::println);
        ZoneId americaNewYork = ZoneId.of("America/New_York");
        ZonedDateTime zonedDateTime = ZonedDateTime.now();
        ZonedDateTime zonedDateTime1 = ZonedDateTime.now(americaNewYork);
        //DateTimeFormatter  --日期格式化 代替SimpleDateFormat 因为线程安全
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        System.out.println("zonedDateTime:" + zonedDateTime);
        System.out.println(dateTimeFormatter.format(zonedDateTime)); //用格式化器格式化时间
        //获取美国纽约时区的时间  --用时间调一个格式化方法(传一个格式化器)  返回一个String
        System.out.println(zonedDateTime1.format(dateTimeFormatter));
        ZonedDateTime zonedDateTime2 = ZonedDateTime.now(Clock.systemUTC());  //获取UTC时区的时间
        //instant时间戳  --通常用来做代码的性能分析或者记录用户的操作时间点
        System.out.println(Instant.now().getEpochSecond()); //获取从1970年1月1日0时0分0秒0毫秒开始到此刻的秒数
        System.out.println(Instant.now().getNano()); //获取从1970年1月1日0时0分0秒0毫秒开始到此刻的剩下不到一秒的纳秒数


    }
    public static void DateTest1() {
        System.out.println(System.currentTimeMillis()); //获取当前时间毫秒值距离1970年1月1日0时0分0秒0毫秒
        //=
        Date date = new Date();
        long time = date.getTime();
        System.out.println(time);
        System.out.println(date);
        //把毫秒转时间
        time = time +20*60*1000; //加20分钟
        System.out.println(new Date(time));
        //SimpleDateFormat  --简单日期格式化
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));
        System.out.println(sdf.format(date));
        System.out.println(sdf.format(time));
        System.out.println("_----------_");
        String dateStr = "2020-01-01 00:00:00";

        try {
            Date dateFromDateStr = sdf.parse(dateStr);
            System.out.println(sdf.format(dateFromDateStr));
        } catch (ParseException e) {
            throw new RuntimeException("格式不一致"+ e);
        }
    }

    public static void DateTest2() {
        //JDK8之后新加的Date类 localDate,localTime,localDateTime  --这些都是不可变对象
        System.out.println("------DK8之后新加的Date类 localDate,localTime,localDateTime--------");
        LocalDate localDate = LocalDate.now(); //获取本地当前年月日
        LocalTime localTime = LocalTime.now(); //获取本地当前时分秒
        LocalDateTime localDateTime = LocalDateTime.now(); //获取本地当前年月日时分秒纳秒
        System.out.println("localDateNow:" + localDate);
        System.out.println("localTimeNow:" + localTime);
        System.out.println("localDateTimeNow:" + localDateTime);
        System.out.println(localDate.getYear()); //年
        System.out.println(localDate.getMonth()); //月
        System.out.println(localDate.getDayOfMonth()); //日
        System.out.println(localDate.getDayOfYear()); //获取今天是当前年有多少天
        System.out.println(localDate.getDayOfWeek()); //获取今天是星期几 --返回的是一个英文的枚举类对象
        System.out.println(localDate.getDayOfWeek().getValue()); //获取今天是星期几在枚举类中的序数 --返回的是一个数字
        LocalDate localDate1 = localDate.minusYears(1).plusMonths(3);
        System.out.println("减1年再加3个月的时间:" + localDate1);
        LocalDate localDate3 = LocalDate.of(2000, 06, 06);
        System.out.println("My birthDay：" + localDate3);
        System.out.println(localDate3.isAfter(localDate)); //判断localDate3是否在localDate之后
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        System.out.println(dateTimeFormatter.format(localDate3));
    }
}
